package dome1;

/*

    实现多态思想的三种必要素 向上转型、重写、继承！！！


    向上转型 、 继承 、

 */

class Animal {

    public String name;
    public int age;


    public void eat() {
        System.out.println(name+" 正在吃饭！");
    }
}

class Dog extends Animal {

    public void wangwang() {
        System.out.println(name+" 正在汪汪叫！");
    }

}

class Brid extends Animal {

    public int Wing;//翅膀

    public void fly() {
        System.out.println(name + " 正在飞！");
    }

}



public class Test1 {

    public static Animal func2() { // 向上转型    4
        return new Dog();
    }

    public static void main4(String[] args) {
        Animal animal = func2();
        animal.name = "十三月";
        animal.eat();
    }

    public static void func(Animal animal) {  // 向上转型    3
        animal.eat();
    }

    public static void main3(String[] args) {

        Dog dog = new Dog();
        dog.name = "十三月";

        func(dog);

        Brid brid = new Brid();
        brid.name = "圆圆";
        func(brid);
    }

    public static void main2(String[] args) {

        Animal animal1 = new Dog();//向上转型   2
        animal1.name = "十三月";
        animal1.eat();
//      animal1.wangwang; //在向上转型的时候父类的引用只能使用自己的成员，不能使用子类特有的成员！！！！

        System.out.println("======");

        Animal animal2 = new Brid();
        animal2.name ="圆圆";
        animal2.eat();
//      animal2.fly(); //在向上转型的时候父类的引用只能使用自己的成员，不能使用子类特有的成员！！！！

    }

    public static void main1(String[] args) {

        Dog dog = new Dog();
        dog.name = "十三月";
        Animal animal1 = dog;//向上转型   1
        animal1.eat();

        System.out.println("======");

        Brid brid = new Brid();
        brid.name = "圆圆";
        Animal animal2 = brid;//向上转型
        animal2.eat();
    }
}
